/**
 * <copyright>
 * </copyright>
 *
 * $Id$
 */
package jp.ekasi.pms.model;

import java.util.Calendar;
import java.util.Date;

import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.ecore.EObject;

/**
 * <!-- begin-user-doc -->
 * A representation of the model object '<em><b>Task</b></em>'.
 * <!-- end-user-doc -->
 *
 * <p>
 * The following features are supported:
 * <ul>
 *   <li>{@link jp.ekasi.pms.model.Task#getUid <em>Uid</em>}</li>
 *   <li>{@link jp.ekasi.pms.model.Task#getId <em>Id</em>}</li>
 *   <li>{@link jp.ekasi.pms.model.Task#getWbs <em>Wbs</em>}</li>
 *   <li>{@link jp.ekasi.pms.model.Task#getName <em>Name</em>}</li>
 *   <li>{@link jp.ekasi.pms.model.Task#getStart <em>Start</em>}</li>
 *   <li>{@link jp.ekasi.pms.model.Task#getFinish <em>Finish</em>}</li>
 *   <li>{@link jp.ekasi.pms.model.Task#getDuration <em>Duration</em>}</li>
 *   <li>{@link jp.ekasi.pms.model.Task#getEffort <em>Effort</em>}</li>
 *   <li>{@link jp.ekasi.pms.model.Task#getPriority <em>Priority</em>}</li>
 *   <li>{@link jp.ekasi.pms.model.Task#getActualStart <em>Actual Start</em>}</li>
 *   <li>{@link jp.ekasi.pms.model.Task#getActualFinish <em>Actual Finish</em>}</li>
 *   <li>{@link jp.ekasi.pms.model.Task#getActualDuration <em>Actual Duration</em>}</li>
 *   <li>{@link jp.ekasi.pms.model.Task#getMemo <em>Memo</em>}</li>
 *   <li>{@link jp.ekasi.pms.model.Task#getResources <em>Resources</em>}</li>
 *   <li>{@link jp.ekasi.pms.model.Task#isMilestone <em>Milestone</em>}</li>
 *   <li>{@link jp.ekasi.pms.model.Task#getSubTasks <em>Sub Tasks</em>}</li>
 *   <li>{@link jp.ekasi.pms.model.Task#isSubTask <em>Sub Task</em>}</li>
 *   <li>{@link jp.ekasi.pms.model.Task#isSummary <em>Summary</em>}</li>
 *   <li>{@link jp.ekasi.pms.model.Task#getSummaryTask <em>Summary Task</em>}</li>
 *   <li>{@link jp.ekasi.pms.model.Task#getProject <em>Project</em>}</li>
 * </ul>
 * </p>
 *
 * @see jp.ekasi.pms.model.ModelPackage#getTask()
 * @model
 * @generated
 */
public interface Task extends EObject {
	/**
	 * Returns the value of the '<em><b>Uid</b></em>' attribute.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Uid</em>' attribute isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Uid</em>' attribute.
	 * @see #setUid(int)
	 * @see jp.ekasi.pms.model.ModelPackage#getTask_Uid()
	 * @model id="true" required="true"
	 * @generated
	 */
	int getUid();

	/**
	 * Sets the value of the '{@link jp.ekasi.pms.model.Task#getUid <em>Uid</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Uid</em>' attribute.
	 * @see #getUid()
	 * @generated
	 */
	void setUid(int value);

	/**
	 * Returns the value of the '<em><b>Id</b></em>' attribute.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Id</em>' attribute isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Id</em>' attribute.
	 * @see jp.ekasi.pms.model.ModelPackage#getTask_Id()
	 * @model unique="false" transient="true" changeable="false" volatile="true" derived="true"
	 * @generated
	 */
	int getId();

	/**
	 * Returns the value of the '<em><b>Wbs</b></em>' attribute.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Wbs</em>' attribute isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Wbs</em>' attribute.
	 * @see #setWbs(String)
	 * @see jp.ekasi.pms.model.ModelPackage#getTask_Wbs()
	 * @model
	 * @generated
	 */
	String getWbs();

	/**
	 * Sets the value of the '{@link jp.ekasi.pms.model.Task#getWbs <em>Wbs</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Wbs</em>' attribute.
	 * @see #getWbs()
	 * @generated
	 */
	void setWbs(String value);

	/**
	 * Returns the value of the '<em><b>Name</b></em>' attribute.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Name</em>' attribute isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Name</em>' attribute.
	 * @see #setName(String)
	 * @see jp.ekasi.pms.model.ModelPackage#getTask_Name()
	 * @model
	 * @generated
	 */
	String getName();

	/**
	 * Sets the value of the '{@link jp.ekasi.pms.model.Task#getName <em>Name</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Name</em>' attribute.
	 * @see #getName()
	 * @generated
	 */
	void setName(String value);

	/**
	 * Returns the value of the '<em><b>Start</b></em>' attribute.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Start</em>' attribute isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Start</em>' attribute.
	 * @see #setStart(Calendar)
	 * @see jp.ekasi.pms.model.ModelPackage#getTask_Start()
	 * @model dataType="jp.ekasi.pms.model.HCalendar"
	 * @generated
	 */
	Calendar getStart();

	/**
	 * Sets the value of the '{@link jp.ekasi.pms.model.Task#getStart <em>Start</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Start</em>' attribute.
	 * @see #getStart()
	 * @generated
	 */
	void setStart(Calendar value);

	/**
	 * Returns the value of the '<em><b>Duration</b></em>' attribute.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Duration</em>' attribute isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Duration</em>' attribute.
	 * @see #setDuration(long)
	 * @see jp.ekasi.pms.model.ModelPackage#getTask_Duration()
	 * @model dataType="jp.ekasi.pms.model.HDuration"
	 * @generated
	 */
	long getDuration();

	/**
	 * Sets the value of the '{@link jp.ekasi.pms.model.Task#getDuration <em>Duration</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Duration</em>' attribute.
	 * @see #getDuration()
	 * @generated
	 */
	void setDuration(long value);

	/**
	 * Returns the value of the '<em><b>Finish</b></em>' attribute.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Finish</em>' attribute isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Finish</em>' attribute.
	 * @see #setFinish(Calendar)
	 * @see jp.ekasi.pms.model.ModelPackage#getTask_Finish()
	 * @model dataType="jp.ekasi.pms.model.HCalendar"
	 * @generated
	 */
	Calendar getFinish();

	/**
	 * Sets the value of the '{@link jp.ekasi.pms.model.Task#getFinish <em>Finish</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Finish</em>' attribute.
	 * @see #getFinish()
	 * @generated
	 */
	void setFinish(Calendar value);

	/**
	 * Returns the value of the '<em><b>Effort</b></em>' attribute.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Effort</em>' attribute isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Effort</em>' attribute.
	 * @see #setEffort(String)
	 * @see jp.ekasi.pms.model.ModelPackage#getTask_Effort()
	 * @model
	 * @generated
	 */
	String getEffort();

	/**
	 * Sets the value of the '{@link jp.ekasi.pms.model.Task#getEffort <em>Effort</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Effort</em>' attribute.
	 * @see #getEffort()
	 * @generated
	 */
	void setEffort(String value);

	/**
	 * Returns the value of the '<em><b>Priority</b></em>' attribute.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Priority</em>' attribute isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Priority</em>' attribute.
	 * @see #setPriority(int)
	 * @see jp.ekasi.pms.model.ModelPackage#getTask_Priority()
	 * @model
	 * @generated
	 */
	int getPriority();

	/**
	 * Sets the value of the '{@link jp.ekasi.pms.model.Task#getPriority <em>Priority</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Priority</em>' attribute.
	 * @see #getPriority()
	 * @generated
	 */
	void setPriority(int value);

	/**
	 * Returns the value of the '<em><b>Actual Start</b></em>' attribute.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Actual Start</em>' attribute isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Actual Start</em>' attribute.
	 * @see #setActualStart(Calendar)
	 * @see jp.ekasi.pms.model.ModelPackage#getTask_ActualStart()
	 * @model dataType="jp.ekasi.pms.model.HCalendar"
	 * @generated
	 */
	Calendar getActualStart();

	/**
	 * Sets the value of the '{@link jp.ekasi.pms.model.Task#getActualStart <em>Actual Start</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Actual Start</em>' attribute.
	 * @see #getActualStart()
	 * @generated
	 */
	void setActualStart(Calendar value);

	/**
	 * Returns the value of the '<em><b>Actual Duration</b></em>' attribute.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Actual Duration</em>' attribute isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Actual Duration</em>' attribute.
	 * @see #setActualDuration(long)
	 * @see jp.ekasi.pms.model.ModelPackage#getTask_ActualDuration()
	 * @model dataType="jp.ekasi.pms.model.HDuration" ordered="false"
	 * @generated
	 */
	long getActualDuration();

	/**
	 * Sets the value of the '{@link jp.ekasi.pms.model.Task#getActualDuration <em>Actual Duration</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Actual Duration</em>' attribute.
	 * @see #getActualDuration()
	 * @generated
	 */
	void setActualDuration(long value);

	/**
	 * Returns the value of the '<em><b>Memo</b></em>' attribute.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Memo</em>' attribute isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Memo</em>' attribute.
	 * @see #setMemo(String)
	 * @see jp.ekasi.pms.model.ModelPackage#getTask_Memo()
	 * @model
	 * @generated
	 */
	String getMemo();

	/**
	 * Sets the value of the '{@link jp.ekasi.pms.model.Task#getMemo <em>Memo</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Memo</em>' attribute.
	 * @see #getMemo()
	 * @generated
	 */
	void setMemo(String value);

	/**
	 * Returns the value of the '<em><b>Resources</b></em>' reference list.
	 * The list contents are of type {@link jp.ekasi.pms.model.Resource}.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Resources</em>' reference list isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Resources</em>' reference list.
	 * @see jp.ekasi.pms.model.ModelPackage#getTask_Resources()
	 * @model
	 * @generated
	 */
	EList<Resource> getResources();

	/**
	 * Returns the value of the '<em><b>Milestone</b></em>' attribute.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Milestone</em>' attribute isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Milestone</em>' attribute.
	 * @see #setMilestone(boolean)
	 * @see jp.ekasi.pms.model.ModelPackage#getTask_Milestone()
	 * @model
	 * @generated
	 */
	boolean isMilestone();

	/**
	 * Sets the value of the '{@link jp.ekasi.pms.model.Task#isMilestone <em>Milestone</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Milestone</em>' attribute.
	 * @see #isMilestone()
	 * @generated
	 */
	void setMilestone(boolean value);

	/**
	 * Returns the value of the '<em><b>Sub Tasks</b></em>' reference list.
	 * The list contents are of type {@link jp.ekasi.pms.model.Task}.
	 * It is bidirectional and its opposite is '{@link jp.ekasi.pms.model.Task#getSummaryTask <em>Summary Task</em>}'.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Sub Tasks</em>' reference list isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Sub Tasks</em>' reference list.
	 * @see jp.ekasi.pms.model.ModelPackage#getTask_SubTasks()
	 * @see jp.ekasi.pms.model.Task#getSummaryTask
	 * @model opposite="summaryTask" changeable="false"
	 * @generated
	 */
	EList<Task> getSubTasks();

	/**
	 * Returns the value of the '<em><b>Sub Task</b></em>' attribute.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Sub Task</em>' attribute isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Sub Task</em>' attribute.
	 * @see jp.ekasi.pms.model.ModelPackage#getTask_SubTask()
	 * @model transient="true" changeable="false" volatile="true"
	 * @generated
	 */
	boolean isSubTask();

	/**
	 * Returns the value of the '<em><b>Summary</b></em>' attribute.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Summary</em>' attribute isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Summary</em>' attribute.
	 * @see jp.ekasi.pms.model.ModelPackage#getTask_Summary()
	 * @model transient="true" changeable="false" volatile="true" derived="true"
	 * @generated
	 */
	boolean isSummary();

	/**
	 * Returns the value of the '<em><b>Summary Task</b></em>' reference.
	 * It is bidirectional and its opposite is '{@link jp.ekasi.pms.model.Task#getSubTasks <em>Sub Tasks</em>}'.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Summary Task</em>' container reference isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Summary Task</em>' reference.
	 * @see #setSummaryTask(Task)
	 * @see jp.ekasi.pms.model.ModelPackage#getTask_SummaryTask()
	 * @see jp.ekasi.pms.model.Task#getSubTasks
	 * @model opposite="subTasks" resolveProxies="false"
	 * @generated
	 */
	Task getSummaryTask();

	/**
	 * Sets the value of the '{@link jp.ekasi.pms.model.Task#getSummaryTask <em>Summary Task</em>}' reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Summary Task</em>' reference.
	 * @see #getSummaryTask()
	 * @generated
	 */
	void setSummaryTask(Task value);

	/**
	 * Returns the value of the '<em><b>Project</b></em>' reference.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Project</em>' reference isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Project</em>' reference.
	 * @see jp.ekasi.pms.model.ModelPackage#getTask_Project()
	 * @model transient="true" changeable="false" volatile="true" derived="true"
	 * @generated
	 */
	Project getProject();

	/**
	 * Returns the value of the '<em><b>Actual Finish</b></em>' attribute.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Actual Finish</em>' attribute isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Actual Finish</em>' attribute.
	 * @see #setActualFinish(Calendar)
	 * @see jp.ekasi.pms.model.ModelPackage#getTask_ActualFinish()
	 * @model dataType="jp.ekasi.pms.model.HCalendar"
	 * @generated
	 */
	Calendar getActualFinish();

	/**
	 * Sets the value of the '{@link jp.ekasi.pms.model.Task#getActualFinish <em>Actual Finish</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Actual Finish</em>' attribute.
	 * @see #getActualFinish()
	 * @generated
	 */
	void setActualFinish(Calendar value);

} // Task
